#include <stdio.h>
#include <stdlib.h>
#include <GL/glut.h>
#include "texturas.h"

/*********************************************************************
 * Lee una imagen de textura en formato tga
 * Parametros --> char *fichero : Cadena de caracteres con el nombre
 * del fichero
 * int num: Numero que identifica la textura
 * Salida --> Ninguna
 *********************************************************************/
void leeTextura(char *fichero, int num) {
	int i, j;
	char r, g, b, c;
	FILE *tga;

	/* Apertura del fichero TGA */
	if ((tga = fopen(fichero, "rb")) == NULL )
		printf("Error abriendo el fichero: %s\n", fichero);
	else {
		/* Lee los 18 primeros caracteres de la cabecera */
		for (j = 1; j <= 18; j++)
			fscanf(tga, "%c", &c);

		/* Lee la imagen */
		for (j = TEX_H - 1; j >= 0; j--) {
			for (i = TEX_W - 1; i >= 0; i--) {
				fscanf(tga, "%c%c%c", &b, &g, &r);
				texturas[num][j][i][0] = (GLubyte) r;
				texturas[num][j][i][1] = (GLubyte) g;
				texturas[num][j][i][2] = (GLubyte) b;
			}
		}
		fclose(tga); /* Cierre del fichero TGA */
	}
}

void cargaTextura(char *fichero, int num) {
	leeTextura(fichero, num);
	glBindTexture(GL_TEXTURE_2D, nombreTexturas[num]);
	glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
	glTexImage2D(GL_TEXTURE_2D, 0, 3, TEX_W, TEX_H, 0, GL_RGB, GL_UNSIGNED_BYTE,
			texturas[num]);
	glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
	glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
	glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
	glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
	glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
}

void inicializaTexturas() {
	char *archivos[] = { "tex/ojo.tga", "tex/dirt.tga", "tex/eye.tga" };
	glGenTextures(10, nombreTexturas);
	for (int i = 0; i < sizeof(archivos) / sizeof(*archivos); i++) {
		cargaTextura(archivos[i], i);
	}
}

GLuint dameTextura(int n) {
	return nombreTexturas[n];
}
